跳到主要内容

某日,例行的打了一晚上牌之后开始焦虑。在知乎上翻到了 T 学长的 23 届小硕秋招分享-数据库/存储方向 - 知乎 ,于是决定开始学习数据库。

课程笔记

实验进度

与项目有关的八股文

2023 的改动

迟宝宝的匹村 CMU 春游记 - 知乎

Project 0 是写一个 copy-on-write trie structure,在两周的时间里帮助学生快速入手 C++ 的智能指针、锁、继承、模版等等概念,从而为之后的 project 做准备。改 project 0 的想法上学期就有了,快到期末的时候我和其他助教讲了我的想法,要搞一个大的,做 "MVCC snapshot trie"。刚开始其他 TA 觉得很难,但实际写起来并没有多少代码,MVCC snapshot 也换成了 copy-on-write 这样更好理解的概念。从观感上来讲学期中因为不会写 C++ 而碰到问题来 office hour 或在 Piazza 上提问的学生比上学期少很多,所以下学期应该还会继续用这个 project。

Project 2 是写 B+ Tree,这是曾经公认的最难 project。上学期分析了学生写不出来的原因以后,发现可以用比较巧妙的写法来帮助大家写出正确的代码,因此今年加入了一个叫 page guard 的东西。原来的读写 B+ Tree page 的逻辑是,在读的情况下,先从 buffer pool manager 里面拿到这一页 (pin count +1),然后加读锁;在使用完成后,解锁并 unpin。由于各种原因,学生经常忘记在所有的分支路径下解锁用完的 page,导致一系列问题。今年新加入的 page guard 类似 Rust 里面的 MutexGuard,持有 page guard 就意味着在使用某个 page,并且拿了这个 page 的锁。page guard 出使用范围则自动解锁并 unpin。这个改进给学生的学习体验带来了比较显著的提升,今年有 80% 的学生在这个项目里取得了满分,而去年只有 60%。

Project 3 加入了 hash join optimizer rule,难度比之前提升了一个等级。

别人是怎么把它写到简历的?

1. 牛客/成都理工/大三/ACMer

简历经过了多次修改,终于有个样子了,目标大三下实习_牛客网 严格鸽 - 知乎

CMU15445 是基于现代 C++开发的支持并发操作的简单 SQL 操作的单机数据库。

底层基于 LRU-K 替换设计了 BufferPool,所有 page 操作在 Buffer Pool 上进行,Buffer Pool 采用了可扩属哈希表。

数据库建立在 B+tree 上,基于了 RAII 来管理释放 page,实现了在读写锁的基础上采用乐观与悲观的实现。

语句执行采用火山模型/迭代器模型,支持 SELECT,DELETE,UPDATE,JOIN,DISTINCT 等操作。

项目基于 cmake。,采用 gtest 进行单元测试,gdb 进行调试。

2. Bilibili/211 本/大三/ACMer

【简历修改】24 届 C++本科【项目 CMU15-445】_哔哩哔哩_bilibili

UP 主的修改建议

  • CMU15-445/645 C++ 面向磁盘的关系型数据库 (OLTP)
  • 技术点
  • 通过所有测试样例要删除!!!做这个项目不是为了通过测试样例
  • 体现你的思考
    • perf 火焰图,性能优化,提升了多少,排行榜,QPS 达到了多少,怎么做的优化
    • 分成两段写:
      • 存储层:缓冲池,B+树,隔离级别
      • SQL 层:执行引擎,算子实现

原始的简历描述

  • CMU 15-445 是基于现代 C++开发的支持并发操作的简单 SQL 操作的单机数据库
  • 实现了线程安全的支持 KV 形式存储的字典树
  • 利用 lruk 策略实现缓存管理,实现了可扩展哈希表,利用可扩展哈希表存储数据库 page 到缓存池 frame 的映射
  • 实现了多线程下 B+树索引的查找插入删除操作,利用火焰图进行性能瓶颈分析,优化 b+树性能,实现 RC,RR 隔离级别.
  • 每个项目都通过了所有测试样例

My Resume

项目背景

数据库入门课程,基于 C++ 17 开发的面向磁盘的单机数据库,实验由 4 个 Project 组成:

  1. 采用 RAII 思想管理页面,实现 LRU-K 替换策略的缓冲池
  2. 设计并实现 B+树索引引擎
  3. 基于火山模型,实现增删查改、AGG、JOIN 等常用 SQL 算子
  4. 基于两阶段锁 (2PL),实现可重复读 (RR)、读已提交 (RC)、读未提交 (RU) 三种隔离级别

项目内容

在通过标准测试的基础上,进一步完成了缓冲池并发 I/O 优化、乐观策略的 B+树、常见查询计划优化(常量折叠、列裁剪、谓词下推、点查询优化等)等。Project 1/3/4 在 2023 CMU 15-445 的非本校学生排行中,达到前 10%。